Random Number Generator

fun
Published

May 20, 2023

Random number generation using a quantum computer is truly random, it uses superposition principle to generate real random data instead of random-looking periodic sequences.

Using quantum simulator

import random
import numpy as np
from collections import Counter
from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit
from qiskit import BasicAer, execute
n = 4
trials = 512*n
q = QuantumRegister(n)
c = ClassicalRegister(n)
circuit = QuantumCircuit(q, c)
for j in range(n):
    circuit.h(q[j])
circuit.measure(q,c)
<qiskit.circuit.instructionset.InstructionSet at 0x7fc55d49b310>
circuit.draw('mpl')

job = execute(circuit, BasicAer.get_backend('qasm_simulator'), shots=trials)
counts = job.result().get_counts()
count_map = {}
for ct in counts:
    count_map[ int(ct,2) ] = counts[ct]/8192

from qiskit.tools.visualization import plot_histogram    
plot_histogram(count_map, figsize = (10,5),color=['crimson'])

Using classical numpy

They are based on deterministic, predictable algorithms and thus not secure

N = 2**n
rand_lst = []
for _ in range(trials):
    rand_lst.append(np.random.randint(0, N))
counter_rand = Counter(rand_lst)
counter_rand_prob = {}
for key,val in counter_rand.items():
    counter_rand_prob[key] = val/trials
plot_histogram(counter_rand_prob, figsize = (10, 5), color=['midnightblue'])

Huh! the distributions seem similar, what’s the hoopla about?

ok, here is a paper on random number generator https://shorturl.at/AFMQZ

They do a bunch of tests:
  1. Restart
  2. Autocorrelation
  3. NIST statistical tests